package com.abewy.android.apps.klyph.core.request;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.List;
import java.util.concurrent.Executor;
import org.json.JSONArray;
import android.os.AsyncTask;
import com.abewy.android.apps.klyph.core.KlyphExecutor;
import com.abewy.android.apps.klyph.core.graph.GraphObject;
import com.abewy.android.apps.klyph.core.request.DeserializeTask.DeserializeCallback;
class DeserializeTask2 extends AsyncTask<JSONArray, Void, List<GraphObject>>
{
private RequestQuery query;
private List<GraphObject> previousResults;
private DeserializeCallback callback;
private static Method executeOnExecutorMethod;
static
{
for (Method method : AsyncTask.class.getMethods())
{
if ("executeOnExecutor".equals(method.getName()))
{
Class<?>[] parameters = method.getParameterTypes();
if ((parameters.length == 2) && (parameters[0] == Executor.class) && parameters[1].isArray())
{
executeOnExecutorMethod = method;
break;
}
}
}
}
public DeserializeTask2(RequestQuery query, List<GraphObject> previousResults, DeserializeCallback callback)
{
this.query = query;
this.previousResults = previousResults;
this.callback = callback;
}
@Override
protected List<GraphObject> doInBackground(JSONArray... params)
{
JSONArray data = params[0];
if (!query.isNextQuery())
return query.handleResult(data);
else
return query.handleResult(previousResults, data);
}
@Override
protected void onPostExecute(List<GraphObject> result)
{
if (callback != null)
callback.onDeserializeComplete(result);
}
DeserializeTask2 executeOnSettingsExecutor()
{
try
{
if (executeOnExecutorMethod != null)
{
executeOnExecutorMethod.invoke(this, KlyphExecutor.getExecutor(), null);
return this;
}
}
catch (InvocationTargetException e)
{
// fall-through
}
catch (IllegalAccessException e)
{
// fall-through
}
this.execute();
return this;
}
}